#!/bin/bash
debug=0
values=4
tests=(
uso	zztool	''	''	t	"Uso: zztool ferramenta [argumentos]"
index_var	tan	testando	''	t	4
arquivo_vago	tool	''	''	r	"Arquivo tool j. existe. Abortando."
arquivo_legivel	_fake_	''	''	r	"N.o consegui ler o arquivo _fake_"

# ZZCOR=0
eco	testando	''	''	t	"testando"
)
. _lib


############################################################################

# Testes personalizados

ZZCOR=1

compara_texto()
{
	local result=$(eval "$zz $comando")
	if test "$ok" != "$result"
	then
		echo "ERROR: $comando"
		echo "expected '$ok', got '$result'"
	fi
}
compara_exitcode()
{
	local result=$(eval "$zz $comando"; echo $?)
	if test "$ok" != "$result"
	then
		echo "ERROR: $comando"
		echo "expected '$ok', got '$result'"
	fi
}

# eco
comando="tool eco testando"; ok="[36;1mtestando[m"
compara_texto

# acha
comando="tool acha tan testando"; ok="tes[36;1mtan[mdo"
compara_texto

# grep_var
ok=0; comando="tool grep_var ana banana"; compara_exitcode
ok=1; comando="tool grep_var XXX banana"; compara_exitcode

# testa_numero
ok=0; comando="tool testa_numero 9"    ; compara_exitcode
ok=0; comando="tool testa_numero 9999" ; compara_exitcode
ok=1; comando="tool testa_numero XXX"  ; compara_exitcode
ok=1; comando="tool testa_numero -9"   ; compara_exitcode

# testa_numero_sinal
ok=0; comando="tool testa_numero_sinal 9"    ; compara_exitcode
ok=0; comando="tool testa_numero_sinal 9999" ; compara_exitcode
ok=0; comando="tool testa_numero_sinal +9999"; compara_exitcode
ok=0; comando="tool testa_numero_sinal -9999"; compara_exitcode
ok=1; comando="tool testa_numero_sinal XXX"  ; compara_exitcode
ok=1; comando="tool testa_numero_sinal 9.9"  ; compara_exitcode
ok=1; comando="tool testa_numero_sinal ++9"  ; compara_exitcode

# testa_numero_fracionario
ok=0; comando="tool testa_numero_fracionario 0,0"    ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0,00"   ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0,000"  ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0,0000" ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0,00000"; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 00,0"   ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 000,0"  ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0000,0" ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 00000,0"; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 0.0"    ; compara_exitcode
ok=0; comando="tool testa_numero_fracionario 000.000"; compara_exitcode
ok=1; comando="tool testa_numero_fracionario XXX"  ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario -9.9" ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario +9.9" ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario 9"    ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario +9"   ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario -9"   ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario ,9"   ; compara_exitcode
ok=1; comando="tool testa_numero_fracionario .9"   ; compara_exitcode

# testa_dinheiro
ok=0; comando="tool testa_dinheiro 0,00"   ; compara_exitcode
ok=0; comando="tool testa_dinheiro 00,00"  ; compara_exitcode
ok=0; comando="tool testa_dinheiro 000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 0.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 00.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 0.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 00.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 000.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 0.000.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 00.000.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 000.000.000.000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 0000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 000000,00" ; compara_exitcode
ok=0; comando="tool testa_dinheiro 00000000,00" ; compara_exitcode
# centavos errados
ok=1; comando="tool testa_dinheiro 0,0"            ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0,000"          ; compara_exitcode
# ponto colocado errado
ok=1; comando="tool testa_dinheiro 0.0,00"         ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0000.0,00"      ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.0.000,00"     ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.00.000,00"    ; compara_exitcode
ok=1; comando="tool testa_dinheiro 000.00.000,00"  ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.000.0000,00"  ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.,00"          ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.0,00"         ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.00,00"        ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.0000,00"      ; compara_exitcode
ok=1; comando="tool testa_dinheiro .000,00"        ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0000.000,00"    ; compara_exitcode
ok=1; comando="tool testa_dinheiro 0.0000.000,00"  ; compara_exitcode
# outros
ok=1; comando="tool testa_dinheiro XXX"  ; compara_exitcode
ok=1; comando="tool testa_dinheiro 9"    ; compara_exitcode
ok=1; comando="tool testa_dinheiro +9"   ; compara_exitcode
ok=1; comando="tool testa_dinheiro -9"   ; compara_exitcode
ok=1; comando="tool testa_dinheiro ,9"   ; compara_exitcode
ok=1; comando="tool testa_dinheiro .9"   ; compara_exitcode

# testa_binario
ok=0; comando="tool testa_binario 0"    ; compara_exitcode
ok=0; comando="tool testa_binario 1"    ; compara_exitcode
ok=0; comando="tool testa_binario 0000" ; compara_exitcode
ok=0; comando="tool testa_binario 0110" ; compara_exitcode
ok=1; comando="tool testa_binario 2"    ; compara_exitcode
ok=1; comando="tool testa_binario +010" ; compara_exitcode
ok=1; comando="tool testa_binario -010" ; compara_exitcode

# testa_ip
ok=0; comando="tool testa_ip 0.0.0.0"            ; compara_exitcode
ok=0; comando="tool testa_ip 99.99.99.99"        ; compara_exitcode
ok=0; comando="tool testa_ip 255.255.255.255"    ; compara_exitcode
ok=0; comando="tool testa_ip 1.11.111.0"         ; compara_exitcode
ok=0; comando="tool testa_ip 0.99.100.199"       ; compara_exitcode
ok=0; comando="tool testa_ip 200.249.250.255"    ; compara_exitcode
ok=1; comando="tool testa_ip 000.000.000.000"    ; compara_exitcode
ok=1; comando="tool testa_ip 256.256.256.256"    ; compara_exitcode
ok=1; comando="tool testa_ip 999.999.999.999"    ; compara_exitcode
ok=1; comando="tool testa_ip 0000.0000.0000.0000"; compara_exitcode
ok=1; comando="tool testa_ip 0.0.0"              ; compara_exitcode
ok=1; comando="tool testa_ip 0.0"                ; compara_exitcode
ok=1; comando="tool testa_ip 0"                  ; compara_exitcode

# testa_data
# O ano é livre
ok=0; comando="tool testa_data 01/01/0" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/1" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/10" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/100" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/1000" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/2000" ; compara_exitcode
ok=0; comando="tool testa_data 01/01/9999" ; compara_exitcode
# Limites mensais
ok=0; comando="tool testa_data 31/01/2000" ; compara_exitcode
ok=0; comando="tool testa_data 29/02/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/03/2000" ; compara_exitcode
ok=0; comando="tool testa_data 30/04/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/05/2000" ; compara_exitcode
ok=0; comando="tool testa_data 30/06/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/07/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/08/2000" ; compara_exitcode
ok=0; comando="tool testa_data 30/09/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/10/2000" ; compara_exitcode
ok=0; comando="tool testa_data 30/11/2000" ; compara_exitcode
ok=0; comando="tool testa_data 31/12/2000" ; compara_exitcode
# Datas com um dígito no dia ou mês são proibidas por enquanto
ok=1; comando="tool testa_data 1/01/2000" ; compara_exitcode
ok=1; comando="tool testa_data 5/05/2000" ; compara_exitcode
ok=1; comando="tool testa_data 9/09/2000" ; compara_exitcode
ok=1; comando="tool testa_data 01/1/2000" ; compara_exitcode
ok=1; comando="tool testa_data 05/5/2000" ; compara_exitcode
ok=1; comando="tool testa_data 09/9/2000" ; compara_exitcode
ok=1; comando="tool testa_data 1/1/2000" ; compara_exitcode
ok=1; comando="tool testa_data 5/5/2000" ; compara_exitcode
ok=1; comando="tool testa_data 9/9/2000" ; compara_exitcode
# Fora do limite
ok=1; comando="tool testa_data 32/01/2000" ; compara_exitcode
ok=1; comando="tool testa_data 30/02/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/03/2000" ; compara_exitcode
ok=1; comando="tool testa_data 31/04/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/05/2000" ; compara_exitcode
ok=1; comando="tool testa_data 31/06/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/07/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/08/2000" ; compara_exitcode
ok=1; comando="tool testa_data 31/09/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/10/2000" ; compara_exitcode
ok=1; comando="tool testa_data 31/11/2000" ; compara_exitcode
ok=1; comando="tool testa_data 32/12/2000" ; compara_exitcode
ok=1; comando="tool testa_data 39/01/2000" ; compara_exitcode
ok=1; comando="tool testa_data 01/13/2000" ; compara_exitcode
ok=1; comando="tool testa_data 01/19/2000" ; compara_exitcode
ok=1; comando="tool testa_data 00/01/2000" ; compara_exitcode
ok=1; comando="tool testa_data 01/00/2000" ; compara_exitcode
ok=1; comando="tool testa_data 99/99/2000" ; compara_exitcode
# Não pega datas parciais
ok=1; comando="tool testa_data 31/12"      ; compara_exitcode
ok=1; comando="tool testa_data 931/12/2000"; compara_exitcode
ok=1; comando="tool testa_data +31/12/2000"; compara_exitcode
ok=1; comando="tool testa_data 31/12/2000+"; compara_exitcode
ok=1; comando="tool testa_data +31/12/2000+"; compara_exitcode

# testa_hora
ok=0; comando="tool testa_hora  0:00" ; compara_exitcode
ok=0; comando="tool testa_hora  1:01" ; compara_exitcode
ok=0; comando="tool testa_hora  2:02" ; compara_exitcode
ok=0; comando="tool testa_hora  3:03" ; compara_exitcode
ok=0; comando="tool testa_hora  4:04" ; compara_exitcode
ok=0; comando="tool testa_hora  5:05" ; compara_exitcode
ok=0; comando="tool testa_hora  6:06" ; compara_exitcode
ok=0; comando="tool testa_hora  7:07" ; compara_exitcode
ok=0; comando="tool testa_hora  8:08" ; compara_exitcode
ok=0; comando="tool testa_hora  9:09" ; compara_exitcode
ok=0; comando="tool testa_hora 00:00" ; compara_exitcode
ok=0; comando="tool testa_hora 01:01" ; compara_exitcode
ok=0; comando="tool testa_hora 02:02" ; compara_exitcode
ok=0; comando="tool testa_hora 03:03" ; compara_exitcode
ok=0; comando="tool testa_hora 04:04" ; compara_exitcode
ok=0; comando="tool testa_hora 05:05" ; compara_exitcode
ok=0; comando="tool testa_hora 06:06" ; compara_exitcode
ok=0; comando="tool testa_hora 07:07" ; compara_exitcode
ok=0; comando="tool testa_hora 08:08" ; compara_exitcode
ok=0; comando="tool testa_hora 09:09" ; compara_exitcode
ok=0; comando="tool testa_hora 10:10" ; compara_exitcode
ok=0; comando="tool testa_hora 11:11" ; compara_exitcode
ok=0; comando="tool testa_hora 12:12" ; compara_exitcode
ok=0; comando="tool testa_hora 13:13" ; compara_exitcode
ok=0; comando="tool testa_hora 14:14" ; compara_exitcode
ok=0; comando="tool testa_hora 15:15" ; compara_exitcode
ok=0; comando="tool testa_hora 16:16" ; compara_exitcode
ok=0; comando="tool testa_hora 17:17" ; compara_exitcode
ok=0; comando="tool testa_hora 18:18" ; compara_exitcode
ok=0; comando="tool testa_hora 19:19" ; compara_exitcode
ok=0; comando="tool testa_hora 20:20" ; compara_exitcode
ok=0; comando="tool testa_hora 21:21" ; compara_exitcode
ok=0; comando="tool testa_hora 22:22" ; compara_exitcode
ok=0; comando="tool testa_hora 23:23" ; compara_exitcode
ok=0; comando="tool testa_hora 23:59" ; compara_exitcode
ok=1; comando="tool testa_hora 24:00" ; compara_exitcode
ok=1; comando="tool testa_hora 24:59" ; compara_exitcode
ok=1; comando="tool testa_hora  4:60" ; compara_exitcode
ok=1; comando="tool testa_hora  4:99" ; compara_exitcode
ok=1; comando="tool testa_hora 99:99" ; compara_exitcode
# Não pega horas parciais
ok=1; comando="tool testa_hora 911:11"  ; compara_exitcode
ok=1; comando="tool testa_hora 11:119"  ; compara_exitcode
ok=1; comando="tool testa_hora 911:119" ; compara_exitcode
# Delimitador (com ou sem)
ok=1; comando="tool testa_hora 2359"    ; compara_exitcode
ok=1; comando="tool testa_hora :"       ; compara_exitcode

# trim
comando="tool trim '   testando   '"; ok="testando"
compara_texto

# multi_stdin
ok=testando
result=$(echo testando | "$zz" tool multi_stdin)
if test "$ok" != "$result"
then
	echo "ERROR: echo testando | tool multi_stdin"
	echo "expected '$ok', got '$result'"
fi
result=$("$zz" tool multi_stdin testando)
if test "$ok" != "$result"
then
	echo "ERROR: tool multi_stdin testando"
	echo "expected '$ok', got '$result'"
fi
